package main

import "fmt"

// PayI
// @Description: 支付接口
type PayI interface {
	PayPage(price int64) string
}

// WeiXinPay
// @Description: 微信-已经实现支付接口
type WeiXinPay struct {
}

func (w WeiXinPay) PayPage(price int64) string {
	return "微信支付链接"
}

// AliPay
// @Description: 支付宝-未实现支付接口
type AliPay struct {
}

func (a AliPay) GetPayPage(price int64) string {
	return "支付宝支付链接"
}

// AliPayAdapter
// @Description: 增加一个适配器，帮助支付宝适配支付接口
type AliPayAdapter struct {
	aliPay *AliPay
}

func (w AliPayAdapter) PayPage(price int64) string {
	return w.aliPay.GetPayPage(price)
}

func main() {
	fmt.Println(PayChannel(WeiXinPay{}, 1))
	fmt.Println(PayChannel(AliPayAdapter{aliPay: &AliPay{}}, 1))
}

// PayChannel
//
//	@Description: 统一支付渠道
//	@param pi
//	@param price
//	@return string
func PayChannel(pi PayI, price int64) string {
	return pi.PayPage(price)
}
